package com.lg.system;

import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import com.lg.system.IDateFormat;
public class CDateTime implements IDateFormat{
	/**
	   * 默认的构造函数
	   */
	  public CDateTime() {
	    mCalendar = Calendar.getInstance();
	    mDate = new java.util.Date();
	  }

	  /**
	   * 给出初始日期的构造函数
	   * @param pDate 初始日期
	   */
	  public CDateTime(java.util.Date pDate) {
	    mCalendar = Calendar.getInstance();
	    mDate = pDate;
	  }

	  /**
	   * 给出年，月，日来生成一个日期的构造函数
	   * @param piYear 年份
	   * @param piMonth 月
	   * @param piDay 日
	   */
	  public CDateTime(int piYear, int piMonth, int piDay) {
	    mCalendar = Calendar.getInstance();
	    mCalendar.set(piYear, piMonth, piDay);
	    mDate = mCalendar.getTime();
	  }

	  public CDateTime(int y, int m, int d, int h, int mi, int sc) {
	    mCalendar = Calendar.getInstance();
	    mCalendar.set(y, m, d, h, mi, sc);
	    mDate = mCalendar.getTime();
	  }

	  /**
	   * 增加时间
	   * @param MilSec 增加的微秒数
	   * @return 修改后的时间
	   */
	  public void addTime( int piMilSec )
	  {
	    long nd = mDate.getTime();
	    nd += ( piMilSec );
	    mDate = new java.util.Date( nd );
	  }

	  /**
	   * 增加时间
	   * @param Day 增加的天数
	   * @return 修改后的时间
	   */
	  public void addDay( int piDay )
	  {
	    long nd = mDate.getTime();
	    nd += ( piDay*24*60*60*1000 );
	    mDate = new java.util.Date( nd );
	  }

	  /**
	   * 下一天
	   * @return 修改后的时间
	   */
	  public void nextDay()
	  {
	    addDay(1);
	  }

	  /**
	   * 前一天
	   * @return 修改后的时间
	   */
	  public void prevDay()
	  {
	    addDay(-1);
	  }

	  /**
	   * 获取时间
	   * @return 修改后的时间
	   */
	  public java.util.Date getTime()
	  {
	    return mDate;
	  }
//	java.sql.Date
	  public java.sql.Date tosqlDate()
	  {
	    if ( mDate == null )     return new java.sql.Date(0);
	    return new java.sql.Date( mDate.getTime() );
	  }

	  //java.sql.Time
	  public java.sql.Time tosqlTime()
	  {
	    if ( mDate == null )     return null;
	    return new java.sql.Time( mDate.getTime() );
	  }

	  //java.sql.Timestamp
	  public java.sql.Timestamp tosqlTimestamp()
	  {
	    if ( mDate == null )
	    {
	      return  new java.sql.Timestamp( new java.util.Date().getTime() );
	    }
	    return new java.sql.Timestamp( mDate.getTime() );
	  }

	  //java.sql.Timestamp
	  public Object tosqlObject()
	  {
	    if ( mDate == null )
	    {
	      return new java.sql.Timestamp( new java.util.Date().getTime() );
	    }
	    return new java.sql.Timestamp( mDate.getTime() );
	  }

	  public int getMonthDays(String year,String month)
	  {
	    int ayear,amonth;
	    try
	    {
	      ayear=Integer.parseInt(year);
	      amonth=Integer.parseInt(month);
	    }
	    catch(Exception e)
	    {
	      return -1;
	    }
	    return getMonthDays(ayear,amonth);
	  }

	  public int getMonthDays(int year,int month)
	  {
	    int days = -1;
	    int monthdays[] =new int[]{31, 28, 31, 30, 31, 30, 31, 31, 30,31, 30, 31};
	    if ( month>=1 && month<=12 )	days = monthdays[month -1];
	    if ( (month==2) && isLeapYear(year) ) days=29;
	    return (days);

	  }

	  /**
	   * 获取微秒时间
	   * @return 修改后的时间
	   */
	  public long getLongTime()
	  {
	    return mDate.getTime() ;
	  }
	  /**
	   * 时间格式的转换
	   * @param psFormat 格式字符串
	   * @return 转换后的字符串
	   */
	  public String format(String psFormat)
	  {
	    if(mDate == null) return "";
	    SimpleDateFormat oFormat = new  java.text.SimpleDateFormat(psFormat);
	    return oFormat.format(mDate);
	  }

	  /**
	   * 时间格式的转换
	   * @param psFormat 日期
	   * @param psFormat 格式
	   * @return 转换后的时间字符串
	   */
	  public static String format(java.util.Date pDate , String psFormat)
	  {
	    if (pDate==null) return "";
	    SimpleDateFormat oFormat = new  java.text.SimpleDateFormat(psFormat);
	    return oFormat.format(pDate);
	  }
	  /**
	   * 数据库时间格式的转换
	   * @param pDate 日期
	   * @param psFormat 格式
	   * @return 转换后的时间字符串
	   */
	  public static String format(java.sql.Date pDate , String psFormat)
	  {
	    if (pDate==null) return "";
	    SimpleDateFormat oFormat = new  java.text.SimpleDateFormat(psFormat);
	    return oFormat.format(pDate);
	  }

	  /**
	   * 时间格式的转换
	   * @param pDate 日期
	   * @param psFormat 格式
	   * @return 转换后的时间字符串
	   */
	  public static String dateToStr(java.util.Date pDate  ,String psFormat)
	  {
	    return format(pDate,psFormat);
	  }

	  /**
	   * 字符串转换为时间
	   * @param psDateStr 日期
	   * @param psFormat 格式
	   * @return 转换后的时间字符串
	   */
	  public static java.util.Date strToDateTime( String psDateStr, String psFormat )
	  {
	    SimpleDateFormat oFormat = new  SimpleDateFormat(psFormat);
	    ParsePosition pos =     new ParsePosition(0);
	    java.util.Date d = oFormat.parse(psDateStr, pos);
	    return d ;
	  }
	  /**
	 * 字符串转换为SQL时间
	 * @param psDateStr 日期
	 * @param psFormat 格式
	 * @return 转换后的时间字符串
	 */
	public static java.sql.Date strToSQLDateTime( String psDateStr, String psFormat )
	{
	  return new java.sql.Date(strToDateTime(psDateStr,psFormat).getTime());
	}

	  /**
	   * 取当前年份
	   * @return
	   */
	  public static String getCurrentYear()
	  {
	    Calendar calendar = Calendar.getInstance();
	    java.util.Date  date = new java.util.Date();
	    calendar.setTime(date);
	    return String.valueOf(calendar.get(Calendar.YEAR));
	  }

	  /**
	   * 取当前月份
	   * @return
	   */
	  public static String getCurrentMonth()
	  {
	    Calendar calendar = Calendar.getInstance();
	    java.util.Date  date = new java.util.Date();
	    calendar.setTime(date);
	    int i=calendar.get(Calendar.MONTH) + 1;
	    String result="";
	    if (i<10)
	    {
	      result = "0" + String.valueOf(i);
	    }
	    else
	    {
	      result = String.valueOf(i);
	    }
	    return result ;
	  }
	  /**
	   * 取当前天数
	   * @return
	   */
	  public static String getCurrentDay()
	  {
	    Calendar calendar = Calendar.getInstance();
	    java.util.Date  date=new java.util.Date();
	    calendar.setTime(date);
	    int i=calendar.get(Calendar.DAY_OF_MONTH);
	    String result="";
	    if (i<10)
	    {
	      result = "0" + String.valueOf(i);
	    }
	    else
	    {
	      result = String.valueOf(i);
	    }
	    return result ;
	  }
	  /**
	   * 判断是否润年
	   * @param piYear
	   * @return
	   */
	  public static boolean isLeapYear(int piYear)
	  {
	    boolean b = ((piYear % 4)==0) && ((piYear % 100)!=0) || ((piYear % 400)==0) ;
	    return (b);
	  }

	  /**
	   * 获得两个时间的间隔天数
	   * @param pDate1
	   * @param pDate2
	   * @return
	   */
	  public static int getInvDays(java.util.Date pDate1, java.util.Date pDate2) {
	    int sDays = 0;
	    SimpleDateFormat format = new SimpleDateFormat("D");
	    SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy"); //当前年
	    int year1 = Integer.valueOf(yearFormat.format(pDate1)).intValue();
	    int year2 = Integer.valueOf(yearFormat.format(pDate2)).intValue();
	    int day1 = Integer.valueOf(format.format(pDate1)).intValue();
	    int day2 = Integer.valueOf(format.format(pDate2)).intValue();
	    int Invcount = 0;
	    //判断是否跨越年限
	    if ( (year2 - year1) > 0) {
	      int LeapYearCount = getCount(year1, year2);
	      Invcount = (year2 - year1) * 365 + LeapYearCount;
	    }
	    sDays = day2 - day1 + Invcount;
	    return sDays;
	  }

	  /**
	   * 获取两个年限直接有多少个闰年
	   * @param year1
	   * @param year2
	   * @return
	   */
	  public static int getCount(int year1, int year2) {
	    int rncount = 0;
	    for (int i = year1; i < year2; i++) {
	      if (isLeapYear(i)) {
	        rncount++;
	      }
	    }
	    return rncount;
	  }


	  public static void main(String[] args) {
	    CDateTime CDateTime1 = new CDateTime();

	  }

	  private java.util.Date mDate;
	  private Calendar mCalendar;
}
